perm filename WIXSUB.FAI[VIS,HPM]4 blob sn#144763 filedate 1975-02-10 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00010 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE	WIXSUB
C00005 00003	PERUSE:	0
C00009 00004	VARIAN:	0
C00012 00005	CLN:	0
C00013 00006	HIPASS:	0			HI PASS FILTERING
C00016 00007	***** SAIL INTERFACE ********
C00017 00008	
C00020 00009	ARN1:	0
C00022 00010	CLEAN:	MOVEM	12,ACS12
C00023 ENDMK
C⊗;
	TITLE	WIXSUB
	ENTRY	INTRST,BSTCOR,CLEAN,PASSHI
	EXTERN	MAKTAB,CORGET,CORREL
WIND:	0
HORWIN:	0
VERWIN:	0
NWIN:	0
WINSIZ:	0

STRIP:	0
MAPTAB:	0
STRIP2:	0

	A←ARRY2←ARRYO←BESTY←3 ↔ ARRY1←ARRY←CNT2←BESTX←4 ↔ DX1←VW←0
	B←T←16 ↔ C←TX←STRP←2 ↔ D←PT←PNT←5 ↔ TY←CNT←6
	SUMSQ←E←TXX←HC←7 ↔ PND←DX2←VC←10 ↔ PNC←X1←D1C←11
	PNE←Y1←D2C←12 ↔ PN1←X2←CNT1←13
	CC←Y2←TOP←14 ↔ DY1←POS←15 ↔ SUM←1 ↔ DL←17

	FOR I←-100,-1,1 { I*I
				}
SQRS:	FOR I←0,100,1   {I*I
				}
PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BPTAB←←12
LINTAB←←13

PICWID:	0 ↔ BICWID: 0
PICLIN:	0 ↔ BICLIN: 0
PICHIG:	0 ↔ BICHIG: 0
PICBIT:	0 ↔ BICBIT: 0
PICWIZ:	0 ↔ BICWIZ: 0
PICSIZ:	0 ↔ BICSIZ: 0
COLTAB:	0 ↔ BOLTAB: 0
ROWTAB:	0 ↔ BOWTAB: 0

SETUP:	0
	MOVE	T,PCWD(ARRY)		;SET "GLOBALS" FOR COMPATABILITY WITH
	MOVEM	T,PICSIZ		;OLD FORMAT
	MOVE	T,LNBYA(ARRY)
	MOVEM	T,PICWIZ
	MOVE	T,BYBI(ARRY)
	MOVEM	T,PICBIT
	MOVE	T,PCLN(ARRY)
	MOVEM	T,PICHIG
	MOVE	T,LNWD(ARRY)
	MOVEM	T,PICLIN
	MOVE	T,LNBY(ARRY)
	MOVEM	T,PICWID
	MOVE	T,BPTAB(ARRY)
	MOVEM	T,COLTAB
	MOVEI	T,LINTAB(ARRY)
	MOVEM	T,ROWTAB
	MOVE	ARRY,(T)
	JRST	@SETUP

SETUP2:	0
	MOVE	T,PCWD(ARRY2)		;SET SIMILAR VARIABLES FOR SECOND ARRAY
	MOVEM	T,BICSIZ
	MOVE	T,LNBYA(ARRY2)
	MOVEM	T,BICWIZ
	MOVE	T,BYBI(ARRY2)
	MOVEM	T,BICBIT
	MOVE	T,PCLN(ARRY2)
	MOVEM	T,BICHIG
	MOVE	T,LNWD(ARRY2)
	MOVEM	T,BICLIN
	MOVE	T,LNBY(ARRY2)
	MOVEM	T,BICWID
	MOVE	T,BPTAB(ARRY2)
	MOVEM	T,BOLTAB
	MOVEI	T,LINTAB(ARRY2)
	MOVEM	T,BOWTAB
	MOVE	ARRY2,(T)
	JRST	@SETUP2
PERUSE:	0
	MOVN	T,HORWIN
	HRRM	T,CV
	HRRM	T,CV+2
	HRRM	T,CW
	HRRM	T,CW+1
	ADDI	T,1
	HRRM	T,DV
	HRRM	T,DV+2
	HRRM	T,DW
	HRRM	T,DW+1
	ADDI	T,1
	HRRM	T,EV
	HRRM	T,EV+2
	HRRM	T,EW
	HRRM	T,EW+1
	MOVN	STRP,PICWIZ
	IMUL	STRP,WIND
	SUB	STRP,PICWIZ
	HRLZ	STRP,STRP
	HRLZ	PNT,PICBIT
	LSH	PNT,6
	ADDI	PNT,-1(ARRY)
THIS←←2
SIZ←←3
	MOVEM	THIS,STRIP		;TEPORARILY SAVE STRP AND ARRYO,
	MOVEM	SIZ,STRIP2		;BECAUSE THESE ARE THE "THIS" AND
	MOVE	SIZ,WIND		;"SIZ" ACS FOR CORGET
	ADDI	SIZ,1
	IMUL	SIZ,PICWIZ
	PUSHJ	17,CORGET
	HALT
	HRRM	THIS,PQ1
	HRRM	THIS,ILP
	HRRM	THIS,PQ2
	HRRM	THIS,PQ3
	ADDI	THIS,1
	HRRM	THIS,PR1
	HRRM	THIS,PR2
	ADD	THIS,PICWIZ
	HRRM	THIS,PP1
	SUBI	THIS,1
	HRRM	THIS,PP
	HRRM	THIS,PP0
	MOVE	THIS,STRIP
	MOVE	SIZ,STRIP2

	SUBI	ARRYO,1
	MOVE	VW,VERWIN
	SETZ	SUM,
VERLP:	MOVE	CNT,STRP
UNPAK:	ILDB	T,PNT
PQ1:	MOVEM	T,STRIP(CNT)
	AOBJN	CNT,UNPAK
	MOVE	CNT,HORWIN
	SETZB	POS,TOP
KLP:	SETZB	HC,VC
	SETZB	D1C,D2C
	MOVE	CNT2,WIND
JLP:	MOVE	CNT1,WIND
ILP:	MOVE	T,STRIP(POS)
PR1:	SUB	T,STRIP+1(POS)
	ADD	HC,SQRS(T)
PQ2:	MOVE	T,STRIP(POS)
PP:	SUB	T,STRIP+1(POS)			;REPLACED BY STRIP+<PICWID>(POS)
	ADD	VC,SQRS(T)
PQ3:	MOVE	T,STRIP(POS)
PP1:	SUB	T,STRIP+1(POS)			;REPLACED BY STRIP +<PICWID>+1
	ADD	D1C,SQRS(T)
PR2:	MOVE	T,STRIP+1(POS)
PP0:	SUB	T,STRIP+1(POS)			;REPLACED BY STRIP+<PICWID>
	ADD	D2C,SQRS(T)
	ADD	POS,PICWIZ
	SOJG	CNT1,ILP
	AOS	POS,TOP
	SOJG	CNT2,JLP
	CAMLE	HC,VC
	MOVE	HC,VC
	CAMLE	HC,D1C
	MOVE	HC,D1C
	CAMLE	HC,D2C
	MOVE	HC,D2C
	ADD	SUM,HC
	TRZ	HC,1				;THE LOCAL MAXIMUM TEST
	MOVEI	T,1
	CAMGE	HC,(ARRYO)
	AOJA	HC,CW
	ORM	T,(ARRYO)
CV:	CAMGE	HC,HORWIN(ARRYO)		;R HALF BECOMES -<HORWIN>
	AOJA	HC,DW
	ORM	T,HORWIN(ARRYO)			;BECOMES -<HORWIN>(ARRYO)
DV:	CAMGE	HC,1+HORWIN(ARRYO)		;BECOMES 1-<HORWIN>
	AOJA	HC,EW
	ORM	T,1+HORWIN(ARRYO)		;1-<HORWIN>
EV:	CAMGE	HC,2+HORWIN(ARRYO)		;2-<HORWIN>
	AOJA	HC,LOOF
	ORM	T,2+HORWIN(ARRYO)		;2-<HORWIN>
	JRST	LOOF
CW:	CAMLE	HC,HORWIN(ARRYO)		;-<HORWIN>
	ORM	T,HORWIN(ARRYO)			;-<HORWIN>
DW:	CAMLE	HC,1+HORWIN(ARRYO)		;1-<HORWIN>
	ORM	T,1+HORWIN(ARRYO)		;1-<HORWIN>
EW:	CAMLE	HC,2+HORWIN(ARRYO)		;2-<HORWIN>
	ORM	T,2+HORWIN(ARRYO)		;2-<HORWIN>
LOOF:	PUSH	ARRYO,HC
	SOJG	CNT,KLP
	SUB	PNT,PICLIN
	SOJG	VW,VERLP

	HRRZ	THIS,PQ1
	PUSHJ	17,CORREL

	JRST	@PERUSE
VARIAN:	0

SCANS:	0
	MOVE	T,ROWTAB		;SET UP ROWTAB,COLTAB ADDRESSES
	HRRM	T,LY1
	MOVE	T,COLTAB
	SUBI	T,1
	HRRM	T,SCT

	MOVE	T,BOWTAB		;SAME FOR ARRY2
	HRRM	T,LY2
	MOVE	T,BOLTAB
	SUBI	T,1
	HRRM	T,SCT2

	MOVE	T,STRIP			;SET UP STRIP AND STRIP2 ADDRS
	HRRM	T,STF1
	HRRM	T,STF2
	MOVE	T,STRIP2
	HRRM	T,S2F1
	HRRM	T,S2F2

	SETZ	TX,
	SETZB	SUM,SUMSQ
	MOVE	TY,Y1
LY1:	MOVE	PT,ROWTAB(TY)		;REPLACED BY ACTUAL ROWTAB
SCT:	ADD	PT,COLTAB-1(X1)		;SAME FOR COLTAB
	HLL	TX,X1
LX1:	ILDB	T,PT
	ADD	SUM,T
	ADD	SUMSQ,SQRS(T)
STF1:	MOVEM	T,STRIP(TX)		;REPLACE WITH REAL STRIP ADDR
	AOBJN	TX,LX1
	AOBJN	TY,LY1
	IMUL	SUM,SUM
	IDIV	SUM,DX1
	IDIV	SUM,DY1
	SUB	SUMSQ,SUM
	MOVEM	SUMSQ,VARIAN

	MOVE	TY,Y2
	SETZ	TX,
LY2:	MOVE	PT,BOWTAB(TY)		;REPLACED BY ACTUAL BOWTAB
SCT2:	ADD	PT,BOLTAB-1(X2)		;AND BOLTAB
	HLL	TX,X2
LX2:	ILDB	T,PT
S2F1:	MOVEM	T,STRIP2(TX)		;REPLACED WITH REAL STRIP2 ADDR
	AOBJN	TX,LX2
	AOBJN	TY,LY2

	HLLZ	X1,X1
	HLLZ	Y1,Y1
	HLLZ	X2,X2
	HLLZ	Y2,Y2
	SUB	X2,X1
	SUB	X2,[1,,0]
	SUB	Y2,Y1
	SUB	Y2,[1,,0]
	MOVE	DL,DX2
	SUB	DL,DX1
	HRLZI	SUM,377777
	SETZ	BESTY,

	SETZ	TXX,
SCY:	HLL	TXX,X2
SCX:	SETZB	TX,BESTX
S2F2:	MOVEI	T,STRIP2(TXX)		;REPLACE WITH REAL STRIP2
	HRRM	T,SCAX
	MOVE	TY,Y1
SCAY:	HLL	TX,X1
SCAX:	MOVE	T,STRIP2(TX)		;JUMPS FROM ONE ROW TO NEXT
STF2:	SUB	T,STRIP(TX)		;REPLACE WITH REAL STRIP
	ADD	BESTX,SQRS(T)
	AOBJN	TX,SCAX
	ADDM	DL,SCAX
	AOBJN	TY,SCAY
	CAML	BESTX,SUM
	JRST	.+3
BTST:	MOVE	SUM,BESTX
	HRRZ	BESTY,TXX
	AOBJN	TXX,SCX
	ADDI	TXX,-1(DX1)
	AOBJN	Y2,SCY
	IDIV	BESTY,DX2
	ASH	SUM,4
	IDIV	SUM,VARIAN
	JRST	@SCANS
CLN:	0
	MOVE	CNT,PICWIZ
	SUBI	CNT,2
	MOVE	A,PICHIG
	SUBI	A,2
	IMUL	CNT,A
	HRLZ	PND,PICBIT
	LSH	PND,6
	ADDI	PND,-1(ARRY)
	MOVE	PNC,PND
	ADD	PNC,PICLIN
	ILDB	B,PNC
	MOVE	PNE,PNC
	ADD	PNE,PICLIN
	ILDB	A,PNC
	MOVE	PN1,PNC
	ILDB	CC,PNC
	IBP	PND
	ILDB	D,PND
	ILDB	E,PNE
WOOP:	MOVE	C,CC
	CAMLE	B,C
	EXCH	B,C
	CAMLE	D,E
	EXCH	D,E
	CAMLE	B,D
	EXCH	B,D
	CAMLE	C,E
	EXCH	C,E
	CAMLE	C,D
	EXCH	C,D
	CAMLE	A,D
	DPB	D,PN1
	CAMGE	A,C
	DPB	C,PN1
	MOVE	PN1,PNC
	MOVE	B,A
	MOVE	A,CC
	ILDB	CC,PNC
	ILDB	D,PND
	ILDB	E,PNE
	SOJG	CNT,WOOP
	JRST	@CLN
HIPASS:	0			;HI PASS FILTERING
	MOVE	T,BOLTAB	;SET UP RIGHT INDEX TABLE REFERENCES
	SUBI	T,1
	HRRM	T,BOLF
	MOVE	T,BOWTAB
	SUBI	T,1
	HRRM	T,BOWF

	MOVE	T,MAPTAB
	HRRM	T,SMT1
	HRRM	T,SMT2
	MOVE	T,STRIP2
	HRRM	T,S2R1
	HRRM	T,S2R2
	HRRM	T,S2R3
	HRRM	T,S2R4
	HRRM	T,S2R5
	SUBI	T,1
	HRRM	T,CO

	MOVEI	E,1
	ASH	E,@PICBIT
	MOVE	C,E
	ASH	C,1
	SUBI	E,1
	MOVE	CNT,E
	HRRM	CNT,TABTS
	HRRM	CNT,TABTS+1
	ASH	CNT,-1
	HRRM	CNT,TABL
	MOVN	E,E
TABL:	HRREI	VW,100(E)
	CAIGE	VW,0
	MOVEI	VW,0
TABTS:	CAILE	VW,77
	MOVEI	VW,77
SMT1:	MOVEM	VW,MAPTAB(E)
	ADDI	E,1
	SOJG	C,TABL
BRK:	HRL	E,ARRY1
	HRR	E,ARRY2
	MOVE	C,ARRY2
	ADD	C,PICSIZ
	SUBI	C,1
	BLT	E,(C)
	MOVN	CNT,PICWIZ
	HRLZ	CNT,CNT
	HRLZ	PNT,PICBIT
	LSH	PNT,6
	ADDI	PNT,-1(ARRY)
	MOVE	PN1,PNT
	MOVE	B,CNT
CL:	ILDB	VW,PNT
S2R1:	MOVEM	VW,STRIP2(B)
	AOBJN	B,CL
	MOVE	E,WIND
	SOJLE	E,NADD
CN:	MOVE	B,CNT
CM:	ILDB	VW,PNT
S2R2:	ADDM	VW,STRIP2(B)
	AOBJN	B,CM
	SOJG	E,CN
NADD:	MOVE	DL,WIND
	ASH	DL,-1
BOLF:	MOVE	ARRY2,BOLTAB-1(DL)	;REPLACED BY REAL BOLTAB ADDRESS
BOWF:	ADD	ARRY2,BOWTAB-1(DL)	;DITTO FOR BOWTAB
	MOVE	C,WIND
	SUB	C,PICWIZ
	HRLZ	C,C
S2R3:	MOVEI	VW,STRIP2
	ADD	VW,WIND
	HRRM	VW,SUMST
	MOVE	E,PICHIG
	SUB	E,WIND
CR:	SETZ	SUM,
	MOVE	B,WIND
CO:	ADD	SUM,STRIP2-1(B)
	SOJG	B,CO
	MOVE	B,C
	MOVE	PND,PICLIN
	ADDB	PND,ARRY2
CP:	MOVE	CC,WINSIZ
	IDIVM	SUM,CC
	ILDB	DY1,PND
SHFST:	SUB	DY1,CC
SMT2:	MOVE	DY1,MAPTAB(DY1)
	DPB	DY1,PND
S2R4:	SUB	SUM,STRIP2(B)
SUMST:	ADD	SUM,STRIP2(B)		;CHANGED TO STRIP+<WIND>
	AOBJN	B,CP
	MOVE	B,CNT
CQ:	ILDB	CC,PN1
	ILDB	VW,PNT
	SUB	VW,CC
S2R5:	ADDM	VW,STRIP2(B)
	AOBJN	B,CQ
	SOJGE	E,CR
	JRST	@HIPASS
;***** SAIL INTERFACE ********

	P←17

ACS12:	0
ACS16:	0
ACS17:	0
RETAD:	0


INTRST:	MOVEM	12,ACS12
	MOVEM	16,ACS16
	POP	P,RETAD
	POP	P,ARRYO
	POP	P,WIND
	POP	P,ARRY
	JSR	SETUP
	MOVEM	17,ACS17
	MOVE	1,PICWID
	SUBI	1,1
	IDIV	1,WIND
	MOVEM	1,HORWIN
	MOVE	1,PICHIG
	SUBI	1,1
	IDIV	1,WIND
	MOVEM	1,VERWIN
	IMUL	1,HORWIN
	MOVEM	1,NWIN
	MOVE	1,WIND
	IMUL	1,1
	MOVEM	1,WINSIZ
	JSR	PERUSE
	MOVE	12,ACS12
	MOVE	16,ACS16
	MOVE	17,ACS17
	IDIV	SUM,NWIN
	JRST	@RETAD

DAX1:	0
DAY1:	0
DAX2:	0
DAY2:	0

DY2:	0
THIS←←2
SIZ←←3
ACS:	BLOCK 20

BSTCOR:	MOVEM	12,ACS12
	MOVEM	16,ACS16
	POP	P,RETAD
	POP	P,DAY2
	POP	P,DAX2
	POP	P,DAY1
	POP	P,DAX1
	POP	P,ARRY2

	MOVE	X1,@DAX1
	MOVE	Y1,@DAY1
	MOVE	X2,@DAX2
	MOVE	Y2,@DAY2
        CAMLE	X1,X2
        EXCH	X1,X2
	CAMLE	Y1,Y2
	EXCH	Y1,Y2
	CAIGE	X1,0
	MOVEI	X1,0
	MOVE	T,5(ARRY2)		;WIDTH
	SUBI	T,1
	CAMLE	X2,T
	MOVE	X2,T
	CAIGE	Y1,0
	MOVEI	Y1,0
	MOVE	T,0(ARRY2)		;HEIGHT
	SUBI	T,1
	CAMLE	Y2,T
	MOVE	Y2,T
	MOVEM	Y2,@DAY2
	MOVEM	X2,@DAX2
	MOVEM	Y1,@DAY1
	MOVEM	X1,@DAX1
	JSR	SETUP2

	POP	P,Y2
	POP	P,X2
	POP	P,Y1
	POP	P,X1
	POP	P,ARRY1

        CAMLE	X1,X2
        EXCH	X1,X2
	CAMLE	Y1,Y2
	EXCH	Y1,Y2
	CAIGE	X1,0
	MOVEI	X1,0
	MOVE	T,5(ARRY1)		;WIDTH
	SUBI	T,1
	CAMLE	X2,T
	MOVE	X2,T
	CAIGE	Y1,0
	MOVEI	Y1,0
	MOVE	T,0(ARRY1)		;HEIGHT
	SUBI	T,1
	CAMLE	Y2,T
	MOVE	Y2,T

	EXCH	Y2,Y1
	EXCH	X2,X1
	JSR	SETUP

	SUBI	Y1,-1(Y2)		;SET UP INNER LOOP COUNTERS
	HRRE	DY1,Y1
	MOVN	Y1,Y1
	HRLZ	Y1,Y1
	HRR	Y1,Y2
	SUBI	X1,-1(X2)
	HRRE	DX1,X1
	MOVN	X1,X1
	HRLZ	X1,X1
	HRR	X1,X2

	MOVE	Y2,@DAY2
	MOVE	T,@DAY1
	SUBI	Y2,-1(T)
	HRREM	Y2,DY2
	MOVN	Y2,Y2
	HRLZ	Y2,Y2
	HRR	Y2,T
	MOVE	X2,@DAX2
	MOVE	T,@DAX1
	SUBI	X2,-1(T)
	HRRE	DX2,X2
	MOVN	X2,X2
	HRLZ	X2,X2
	HRR	X2,T

	MOVEM	16,ACS+16	;SET UP UNPACKING AREAS
	MOVEI	16,ACS
	BLT	16,ACS+15
	MOVE	SIZ,DX1
	IMUL	SIZ,DY1
	PUSHJ	17,CORGET
	HALT
	MOVEM	THIS,STRIP
	HRLZI	16,ACS
	BLT	16,16
	MOVE	SIZ,DX2
	IMUL	SIZ,DY2
	PUSHJ	17,CORGET
	HALT
	MOVEM	THIS,STRIP2
	HRLZI	16,ACS
	BLT	16,16

	MOVEM	17,ACS17
	JSR	SCANS
DIVTT:	ADDB	BESTX,@DAX1
	ADD	BESTX,DX1
	SUBI	BESTX,1
	MOVEM	BESTX,@DAX2
	ADDB	BESTY,@DAY1
	ADD	BESTY,DY1
	SUBI	BESTY,1
	MOVEM	BESTY,@DAY2
	MOVE	12,ACS12
	MOVE	16,ACS16
	MOVE	17,ACS17

	MOVE	THIS,STRIP
	PUSHJ	17,CORREL
	MOVE	THIS,STRIP2
	PUSHJ	17,CORREL

	JRST	@RETAD
ARN1:	0
ARN2:	0
PASSHI:	MOVEM	12,ACS12
	MOVEM	16,ACS16
	POP	P,RETAD
	POP	P,ARRY2
	POP	P,WIND
	POP	P,ARRY1
	HRL	T,ARRY1
	HRR	T,ARRY2
	BLT	T,12(ARRY2)
	MOVE	T,ARRY2
	SUB	T,ARRY1
	ADDM	T,12(ARRY2)
	MOVEM	ARRY1,ARN1
	MOVEM	ARRY2,ARN2
	PUSH	P,ARRY2
	PUSHJ	P,MAKTAB
	MOVE	ARRY1,ARN1
	MOVE	ARRY2,ARN2
	JSR	SETUP
	JSR	SETUP2

	MOVE	1,PICWID	;SET UP WINDOW PARAMETERS
	SUBI	1,1
	IDIV	1,WIND
	MOVEM	1,HORWIN
	MOVE	1,PICHIG
	SUBI	1,1
	IDIV	1,WIND
	MOVEM	1,VERWIN
	IMUL	1,HORWIN
	MOVEM	1,NWIN
	MOVE	1,WIND
	IMUL	1,1
	MOVEM	1,WINSIZ

	MOVEM	16,ACS+16	;SET UP UNPACKING AND MAP TABLE AREAS
	MOVEI	16,ACS
	BLT	16,ACS+15
	MOVEI	SIZ,1
	ASH	SIZ,@PICBIT
	MOVEM	SIZ,MAPTAB
	ASH	SIZ,1
	PUSHJ	17,CORGET
	HALT
	MOVEM	THIS,STRIP
	ADDM	THIS,MAPTAB
	MOVE	SIZ,PICWIZ
	PUSHJ	17,CORGET
	HALT
	MOVEM	THIS,STRIP2
	HRLZI	16,ACS
	BLT	16,16

	MOVEM	17,ACS17
	JSR	HIPASS
	MOVE	17,ACS17
	MOVE	16,ACS16
	MOVE	12,ACS12

	MOVE	THIS,STRIP
	PUSHJ	17,CORREL
	MOVE	THIS,STRIP2
	PUSHJ	17,CORREL

	JRST	@RETAD
CLEAN:	MOVEM	12,ACS12
	MOVEM	16,ACS16
	POP	P,RETAD
	POP	P,ARRY
	JSR	SETUP
	MOVEM	17,ACS17
	JSR	CLN
	MOVE	12,ACS12
	MOVE	16,ACS16
	MOVE	17,ACS17
	JRST	@RETAD



	END